A special class of networked services allowing for the bi-directional exchange of generally text-based messages occurring in real-time is sometimes referred to as online chat or instant messaging (IM). Such forms of communication can operate in push mode between two or more individuals (users) using network-enabled communication devices, such as personal computers, smart phones or other devices, along with shared clients. A user's text is conveyed over a network, such as the Internet, to one or more other subscribed users. More advanced instant messaging software clients also allow enhanced modes of communication, such as live voice or video calling and inclusion of links to media.
Subscribers of such services, also referred to as users, generally establish a listing of other subscribers with whom they may choose to participate in such real-time messaging exchanges. Such other subscribers in reference to any given user can be referred to as the user's friends or contacts. Considering the real-time nature of the message exchange, it is beneficial for each user to know beforehand whether a particular friend or group of friends is online and otherwise available to participate in a real-time message exchange. To facilitate such communications, each user's state of availability can be summarized by a presence status indicator. Particular presence status indicators can vary, for example, from simplistic “present” (i.e., online) and “not present” (i.e., not online), to more sophisticated, such as: “online”; “offline”; “busy” and “away.” Accordingly, there exists a need to retain each user's presence status indicator, such that it is available to any given user choosing to engage in such real-time messaging. Such information can be retained, for example, in a centralized network location and kept up to date such that each of the users can consult the centralized presence status to determine the status of any other user (friend).
In some presence enabled network services, however, no central state is provided regarding the presence status of users. With such networks, it is generally necessary to maintain network connectivity (e.g., a full mesh) between the networked users to allow presence information to be exchanged between them in order that each user is kept up to date as to the presence status of other subscribed users (contacts). Whenever a user in the network graph updates its presence state, it is necessary to broadcast an indication of the updated state to all other users he/she is subscribed to. For users with a large subscription list, such means of updating presence status is an expensive operation, which produces significant amounts of network traffic.
In such scenarios, presence status of any give user is broadcast to all of that user's contacts, without regard to any of the contact's presence status. Consequently, presence status messages are often sent to users who are not online, such that a lot of these packets are never handled on the receiving side. Such an approach leads to unnecessary allocation of network resources, at least in terms of bandwidth consumption.